/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clases_test;

import clases.Ingrediente;
import clases.Producto;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Miguel_
 */
public class testIngrediente {
    
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("recetasUnit");
    EntityManager em;
    Producto pr1;
    Producto pr2;
    Producto pr3;
    
    Ingrediente in1;
    Ingrediente in2;
    Ingrediente in3;
    
    public testIngrediente(){}
    
    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
        em = emf.createEntityManager();
        em.setFlushMode(FlushModeType.AUTO);
        
        pr1 = createProducto("Solomillo cerdo");
        pr2 = createProducto("Espinacas");
        pr3 = createProducto("Tallarines");
        
        in1 = createIngrediente(pr1,500,"gramos");
        in2 = createIngrediente(pr2,250,"gramos");
        in3 = createIngrediente(pr3,120,"gramos"); 
    }

    @After
    public void tearDown() {
        em.close();
    }
    
    private Producto createProducto(String n){
        Producto p = new Producto();
        p.setNombre(n);
        return p;
    }
    
    private Ingrediente createIngrediente(Producto p, double c, String u)
    {
        Ingrediente i = new Ingrediente();
        i.setProducto(p);
        i.setCantidad(c);
        i.setUnidad(u);
        return i;
    }
    
    @Test
    public void persistBebida() {
        em.getTransaction().begin();
        
        // Insertamos los distintos objetos Tipo
        em.persist(in1);
        em.persist(in2);
        em.persist(in3);
        
        assertTrue("Bebida "+in1.getProducto().getNombre()+" "+in1.getCantidad()+" "+in1.getUnidad() + " inserted?",in1.getProducto().getId()>0);
        assertTrue("Bebida "+in2.getProducto().getNombre()+" "+in2.getCantidad()+" "+in2.getUnidad() + " inserted?",in2.getProducto().getId()>0);
        assertTrue("Bebida "+in3.getProducto().getNombre()+" "+in3.getCantidad()+" "+in3.getUnidad() + " inserted?",in3.getProducto().getId()>0);
        
        assertEquals("Receta "+in1.getProducto().getNombre()+" (ID "+in1.getId()+") inserted!.",
                in1.getId(), 1);
        
        em.getTransaction().commit();
    } 
      
}
